home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2000 July / CD 3 / redhat-6.2.iso / RedHat / instimage / usr / lib / anaconda / raid.py < prev    next >
Encoding:
Python Source  |  2000-05-02  |  1.8 KB  |  70 lines

  1. #!/usr/bin/python
  2.  
  3. import _balkan
  4. import isys
  5. import os
  6.  
  7. def scanForRaid(drives):
  8.     raidSets = {}
  9.     raidDevices = {}
  10.  
  11.     for d in drives:
  12.     isys.makeDevInode(d, "/tmp/" + d)
  13.     try:
  14.         parts = _balkan.readTable('/tmp/' + d)
  15.     except SystemError, msg:
  16.         parts = []
  17.  
  18.     os.remove("/tmp/" + d)
  19.     for i in range(0, len(parts) - 1):
  20.         (type, start, size) = parts[i]
  21.         if type != 7: continue
  22.  
  23.         dev = "%s%d" % (d, i + 1)
  24.  
  25.         (major, minor, raidSet, level, nrDisks, totalDisks, mdMinor) = \
  26.             isys.raidsb(dev)
  27.  
  28.         if raidSets.has_key(raidSet):
  29.             (knownLevel, knownDisks, knownMinor, knownDevices) = \
  30.             raidSets[raidSet]
  31.         if knownLevel != level or knownDisks != totalDisks or \
  32.            knownMinor != mdMinor:
  33.                # Raise hell
  34.             raise SystemError, "raid set inconsistency for md%d" % \
  35.                 (mdMinor)
  36.         knownDevices.append(dev)
  37.         raidSets[raidSet] = (knownLevel, knownDisks, knownMinor,
  38.                      knownDevices)
  39.         else:
  40.         raidSets[raidSet] = (level, totalDisks, mdMinor, [dev,])
  41.  
  42.         if raidDevices.has_key(mdMinor):
  43.             if (raidDevices[mdMinor] != raidSet):
  44.             raise SystemError, "raid set inconsistency for md%d" % \
  45.                 (mdMinor)
  46.         else:
  47.             raidDevices[mdMinor] = raidSet
  48.  
  49.     raidList = []
  50.     for key in raidSets.keys():
  51.     (level, totalDisks, mdMinor, devices) = raidSets[key]
  52.     if len(devices) != totalDisks:
  53.         str = "missing components of raid device md%d" % (mdMinor,)
  54.         raise SystemError, str
  55.     raidList.append((mdMinor, devices))
  56.  
  57.     return raidList
  58.         
  59. def startAllRaid(driveList):
  60.     mdList = []
  61.     for (mdDevice, deviceList) in scanForRaid(driveList):
  62.         devName = "md%d" % (mdDevice,)
  63.     isys.raidstart(devName, deviceList[0])
  64.     mdList.append(devName)
  65.     return mdList
  66.  
  67. def stopAllRaid(mdList):
  68.     for dev in mdList:
  69.     isys.raidstop(dev)
  70.